package Metier.Objets;

import java.util.Date;

public class Stock {
    private int id;
    private final int idProduit;
    private int quantite;
    private final Date datePeremption;
    
    /**
     * Constructeur avec quantité à 0
     * @param lId
     * @param lIdProduit 
     */
    public Stock(int lId, int lIdProduit){
        id=lId;
        idProduit=lIdProduit;
        quantite=0;
        datePeremption = null;
    }
    
    /**
     * Constructeur de boisson avec quantité à 0
     * @param lId
     * @param lIdProduit 
     * @param peremption 
     */
    public Stock(int lId, int lIdProduit, Date peremption){
        id=lId;
        idProduit=lIdProduit;
        quantite=0;
        datePeremption = peremption;
    }

    /**
     * Constructeur fixant la quantité
     * @param lId
     * @param lIdProduit
     * @param lQuantite 
     */
    public Stock(int lId, int lIdProduit, int lQuantite) {
        id = lId;
        idProduit = lIdProduit;
        quantite = lQuantite;
        datePeremption = null;
    }
    
    /**
     * Constructeur de boisson fixant la quantité
     * @param lId
     * @param lIdProduit
     * @param lQuantite 
     * @param peremption 
     */
    public Stock(int lId, int lIdProduit, int lQuantite, Date peremption) {
        id = lId;
        idProduit = lIdProduit;
        quantite = lQuantite;
        datePeremption = peremption;
    }
    
    /*
     * Getters
     */
    
    /**
    * @return l'ID du stock
    */
    public int getId() {
        return id;
    }
    
    /**
    * @return l'ID du produit associé au stock courant
    */
    public int getIdProduit() {
        return idProduit;
    }

    /**
    * @return la quantité actuellement en stock du produit associé
    */
    public int getQuantite() {
        return quantite;
    }

    /**
     * @return la date de péremption du stock
     */
    public Date getDatePeremption() {
        return datePeremption;
    }
    
    /*
     * Setters
     */
    
    /**
     * Permet de changer l'ID du stock. en effet, à la première création on ne peut pas savoir quel id lui donnera la base.
     * @param id nouvel ID
     */
    public void setId(int id) {
        this.id = id;
    }

    public void setQuantite(int quantite) {
        this.quantite = quantite;
    }

    /*
    * Méthodes
    */
    
    /**
     * Cette méthode ajoute une certaine quantité de produits au stock en cours
     * @param lQuantite la quantité à ajouter
     */
    public void ajouterAuStock(int lQuantite){
        quantite += lQuantite;
    }
    
    /**
     * Cette méthode retire une certaine quantité de produit au stock en cours, s'il y en a assez en stock pour le permettre
     * @param lQuantite la quantité à supprimer
     * @throws Metier.Exceptions.SuppressionDansStockException si on essaie de supprimer un quantité supérieur au stock actuel
     */
    public void retirerAuStock(int lQuantite) throws Metier.Exceptions.SuppressionDansStockException{
        if(lQuantite > quantite){
            throw new Metier.Exceptions.SuppressionDansStockException(lQuantite+">"+quantite);
        }
        else{
            quantite -= lQuantite;
        }
    }
}
